﻿using NP.BPMReportPlatform.Entities.BPM_Business;
using NP.BPMReportPlatform.Holiday.Dto;
using NP.BPMReportPlatform.HR.Dto;
using NP.BPMReportPlatform.MaterialMasterData.Dto;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;

namespace NP.BPMReportPlatform.MaterialMasterData
{
    /// <summary>
    /// 物料主数据流程 服务
    /// </summary>
    public interface IMMDOrderService : IApplicationService
    {
        /// <summary>
        /// 查询数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<GetLCZXRZXQGLOutput>> GetAllAsync(LCZXRZXQGLInput input);

        /// <summary>
        /// 导出数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<GetLCZXRZXQGLOutput>> ExportAsync(LCZXRZXQGLInput input);

        /// <summary>
        /// 查询数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<GetLCZXRZXQGLNCOutput>> GetAllAsync(LCZXRZXQGLNCInput input);

        /// <summary>
        /// 国家证书 导入Excel
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        Task<ImportResultExt<ImportLCZXInput>> ImporterLCZXExcel(byte[] bytes);

        /// <summary>
        /// 国家证书 导出
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<GetLCZXRZXQGLNCOutput>> ExportAsync(LCZXRZXQGLNCInput input);

        #region 排课平台
        /// <summary>
        /// 排课平台预算数据查询数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<GetPKBudgetDataOutput>> GetPKBudgetDataAllAsync(PKBudgetDataInput input);

        /// <summary>
        /// 排课平台预算数据 导入Excel
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        Task<ImportResultExt<ImportPKBudgetDataInput>> ImporterPKBudgetDataExcel(byte[] bytes);

        /// <summary>
        /// 排课平台预算数据 导出
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<PKBudgetDataOutput>> ExportPKBudgetDataAsync(PKBudgetDataInput input);

        /// <summary>
        /// 获取排课平台 学校/部门
        /// </summary>
        /// <returns></returns>
        Task<PagedResultDto<GetPKBudgetDataOutput>> GetSchoolNameList();
        /// <summary>
        /// 编辑
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task EditAsync(ImportPKBudgetDataInput input);

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task DeleteAsync(Guid id);
        #endregion

        #region 校长提交
        /// <summary>
        /// 校长提交主表历史
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<GetPKSubmittedByPrincipalOutput>> GetPKSubmittedByPrincipalHistory(PKBudgetDataInput input);

        /// <summary>
        /// 获取开始链接
        /// </summary>
        /// <returns></returns>
        Task<string> GetStartUrl();

        Task<PagedResultDto<GetPKSubmittedByPrincipalDetailOutput>> GetPKSubmittedByPrincipalDetailSearch(PKBudgetDataInput input);

        /// <summary>
        /// 校长提交查询明细数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<List<GetPKSubmittedByPrincipalDetailOutput>> GetPKSubmittedByPrincipalDetail(PKBudgetDataInput input);

        Task<List<GetPKMonthPanoramaOutPut>> GetMonthPanorama(PKMonthPanoramaInput input);

        #region 校长提交实际
        /// <summary>
        /// 校长实际提交主表历史
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<GetPKSubmittedByPrincipalRealOutput>> GetPKSubmittedByPrincipalRealHistory(PKBudgetDataInput input);

        /// <summary>
        /// 获取实际开始链接
        /// </summary>
        /// <returns></returns>
        Task<string> GetRealStartUrl();

        Task<List<GetPKMonthPanoramaOutPut>> GetMonthReal(PKMonthPanoramaInput input);

        Task<List<GetPKMonthPanoramaOutPut>> GetMonthRealandEstimate(PKMonthPanoramaInput input);
        /// <summary>
        /// 财务报表查询（实际vs预估）
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<GetPKSubmittedByPrincipalDetailFinancialOutput>> GetPKSubmittedByPrincipalDetailFinancialSearch(PKBudgetDataInput input);
        /// <summary>
        ///  校长提交明细导出(财务报表实际vs预估)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<GetPKSubmittedByPrincipalDetailFinancialOutput>> GetPKSubmittedByPrincipalDetailFinancial(PKBudgetDataInput input);
        /// <summary>
        /// 排班报表查询（实际vs预估）
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<GetPKSubmittedByPrincipalDetailSchdueOutput>> GetPKSubmittedByPrincipalDetailSchdueSearch(PKBudgetDataInput input);
        /// <summary>
        ///  校长提交明细导出(排班报表实际vs预估)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<GetPKSubmittedByPrincipalDetailSchdueOutput>> GetPKSubmittedByPrincipalDetailSchdue(PKBudgetDataInput input);
        #endregion
        /// <summary>
        /// 获取假期数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<ExportHoliday>> GetHolidays(HolidaySearchDto input);
        Task<ExportHoliday> GetHolidaysDetail(HolidaySearchDto input);
        

        /// <summary>
        /// 新增假期
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task AddHoliday(HolidayInput input);

        /// <summary>
        /// 假期维护导出
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<ExportHoliday>> ExportHoliday(HolidaySearchDto input);

        /// <summary>
        /// 假期维护导入
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        Task<ImportResultExt<ExportHoliday>> ImportProcess(byte[] bytes);
        Task SaveAllHoliday(string year);
        #endregion

        /// <summary>
        /// 编辑保存国家证书
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<string> EditNationalData(LCZXRZXQGLDetail input);

        Task<bool> DeleteNationalData(Guid Id);
    }
}